check …MySQL server…… use near '?' at line 1?(这些问题,你看后绝对会收藏) 您所在的位置:网站首页 user name is null check …MySQL server…… use near '?' at line 1?(这些问题,你看后绝对会收藏)

check …MySQL server…… use near '?' at line 1?(这些问题,你看后绝对会收藏)

#check …MySQL server…… use near '?' at line 1?(这些问题,你看后绝对会收藏)| 来源: 网络整理| 查看: 265

文章目录 一、常见错误二、吐血经历三、错误原因四、分享交流

一、常见错误

废话不多逼逼,先看java操作数据库常见错误:

:表名用了MySQL关键字 在这里插入图片描述 如下可知用了dec关键字(但表里的列名用关键字不影响,不信自己试哈)

:SQL语句有错(自己不扎实,怪谁呢!!哈哈哈) 在这里插入图片描述 这里的常常犯的错误又有:

from写成form (我上面的错误就是这个错误)where前面好端端加个逗号 (反正这个我老师没教过哟!! 哈哈哈哈)

但是请你往下看,我犯的错误上面都找不到,你找找看咯!!!

二、吐血经历

前世:

为了避免SQL注入问题,我选择用preparedStatement接口来处理数据库的数据因为想要节约资源和用户访问高效,我采用了阿里巴巴的数据库连接池Druid测试插入数据是否成功

今生: 测试一开始,它就一直报错,错误如下:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1

查了很久也没发现自己的错误在哪?我服了 不信我把代码放上,你也来找找看(工具类没有问题),找到错误可以留言哈哈哈 献上代码: JdbcUtils工具类

package utils; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; import javax.sql.DataSource; import com.alibaba.druid.pool.DruidDataSourceFactory; /** * 使用阿里巴巴提供的数据库连接池(Druid)来连接数据库 * @author 放牛娃学编程 * */ public class JdbcUtils { private static DataSource ds; static { //加载配置文件(druid的配置文件是键值对形式的) Properties pro = new Properties(); //获取配置文件的输入流 InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("druid.properties"); try { pro.load(is); //获取数据库连接池对象 ds = DruidDataSourceFactory.createDataSource(pro); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } //获取connection连接的方法 public static Connection getConnection() throws SQLException { return ds.getConnection(); } //获取数据库连接池的方法 public static DataSource getDatasource() { return ds; } /** * 释放资源 */ public static void close(Statement stmt,Connection conn){ /* if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close();//归还连接 } catch (SQLException e) { e.printStackTrace(); } }*/ close(null,stmt,conn); } public static void close(ResultSet rs , Statement stmt, Connection conn){ if(rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close();//归还连接,归还给数据库连接池 } catch (SQLException e) { e.printStackTrace(); } } } }

DruidTest测试类

package druid_study; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; import utils.JdbcUtils; /** * 1. 使用Druid数据库连接池操作数据库 * 2. 将常用操作封装为JdbcUtils类 * * 目标:向test删除一条记录 * @author 放牛娃学编程 * */ public class DruidTest { public static void main(String[] args) { Connection con = null; PreparedStatement pstm = null; try { //1.获取连接 con = JdbcUtils.getConnection(); //2.定义sql语句 String sql = "delete form test where id=?"; //3.获取PreparedStatement语句对象 pstm = con.prepareStatement(sql); //4.为?设置参数 pstm.setInt(1, 6); //5.执行sql语句,并获取对象 int count = pstm.executeUpdate(sql); //6.处理结果 if(count > 0) { System.out.println("成功删除一条记录"); } else { System.out.println("删除失败"); } } catch(SQLException e) { e.printStackTrace(); } finally { //7.释放资源 JdbcUtils.close(pstm, con); } } } 三、错误原因

小伙伴们有没有找到呢!!!

这里我要公布答案了: 上面的测试代码有两处致命错误,如果你单纯去网上找博客文章排错,那是不太可能揪出来的。错误如下:

SQL语句有错。单词from写成form(这个错误我上面有提到过)执行SQL语句的方式是带有占位符的,但是执行删除操作的时候却用了executeUpdate(sql),正确应该执行executeUpdate() (这个错一定要记在心里呀呀呀) 四、分享交流

最后有兴趣一起交流的,可以关注我的公众号:这里你能够学到很实用的技巧,不是常用的我不说,公众号回复提取码即可获取以下学习资料啦啦啦啦,喜欢就拿去吧!!

(链接时常会失效,若出现此类情况,可以加我微信:17722328325(加时请备注:学习资料))

Java web从入门到精通电子书

Python机器学习电子书

Python400集(北京尚学堂)

JavaScript项目案例、经典面试题

Java300集(入门、精通)

Java后端培训机构录集(同事培训内部提供)

java重要知识pdf文档(价值连城呀呀,不收藏你会后悔的)

在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有